gusucode.com > 基于simulink的数字信号调制与解调的仿真源码程序 > code/演示程序及子程序适用于matlab 7.0及以上版本/modulation.m

    function varargout = modulation(varargin)
% MODULATION M-file for modulation.fig
%      MODULATION, by itself, creates a new MODULATION or raises the existing
%      singleton*.
%
%      H = MODULATION returns the handle to a new MODULATION or the handle to
%      the existing singleton*.
%
%      MODULATION('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in MODULATION.M with the given input arguments.
%
%      MODULATION('Property','Value',...) creates a new MODULATION or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before modulation_OpeningFunction gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to modulation_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Copyright 2002-2003 The MathWorks, Inc.

% Edit the above text to modify the response to help modulation

% Last Modified by GUIDE v2.5 22-May-2008 14:15:56

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @modulation_OpeningFcn, ...
                   'gui_OutputFcn',  @modulation_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before modulation is made visible.
function modulation_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to modulation (see VARARGIN)

global htext;
% Choose default command line output for modulation
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

ud = get(gcbf,'Userdata');

% UIWAIT makes modulation wait for user response (see UIRESUME)
% uiwait(handles.figure1);
%;
str='数字调制演示系统';
strpop={'2ASK数字调制简介:',...
    '',...
      '    二进制数字振幅键控是一种古老的调制方式,是各种数字调制的基础振幅',...
      '键控(也称幅移键控),记作ASK(Amplitude Shift Keying),或称其为开关键',...
      '控(通断键控),记作OOK(On Off  Keying)。二进制数字振幅键控通常记作',...
      '2ASK。',...
      '   对于振幅键控这样的线性调制来说,在二进制里,2ASK是利用代表数字信',...
      '息“0”或“1”的基带矩形脉冲去键控一个连续的载波,使载波时断时续地输',...
      '出。有载波输出时表示发送“1”,无载波输出时表示发送“0”。根据线性调',...
      '制的原理,一个二进制的振幅键控信号可以表示成一个单极性矩形脉冲序列与',...
      '一个正弦型载波的相乘,即',...
      '',...
      '                 e(t)=s(t)*cos(w*t)                       ',...
      '',...
      '         其中s(t)=a1*g(t-nT)+a2*g(t-nT)+……             ',...
      '',...
      '    g(t)是持续时间Ts的矩形脉冲,w为载波频率, {a}为二进制数字,是',...
      '第n个符号的电平取值。',...
};
set(gcf,'name',str,'numbertitle','off','menubar','none',...
    'color',[1,1,.8]);
set(handles.listbox1,'string',strpop);

% --- Outputs from this function are returned to the command line.
function varargout = modulation_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on selection change in popupmenu2.
function popupmenu5_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenu2 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu2
popup5_sel_index = get(handles.popupmenu5, 'Value');
strpop='';
popup4_sel_index = get(handles.popupmenu4, 'Value');
switch popup4_sel_index
    case 1
%------------ù···¨è¨÷ò
switch popup5_sel_index
    case 1
        strpop={'2ASK数字调制简介:',...
            '',...
      '    二进制数字振幅键控是一种古老的调制方式,是各种数字调制的基础振幅',...
      '键控(也称幅移键控),记作ASK(Amplitude Shift Keying),或称其为开关键',...
      '控(通断键控),记作OOK(On Off  Keying)。二进制数字振幅键控通常记作',...
      '2ASK。',...
      '   对于振幅键控这样的线性调制来说,在二进制里,2ASK是利用代表数字信',...
      '息“0”或“1”的基带矩形脉冲去键控一个连续的载波,使载波时断时续地输',...
      '出。有载波输出时表示发送“1”,无载波输出时表示发送“0”。根据线性调',...
      '制的原理,一个二进制的振幅键控信号可以表示成一个单极性矩形脉冲序列与',...
      '一个正弦型载波的相乘,即',...
      '',...
      '                 e(t)=s(t)*cos(w*t)                       ',...
      '',...
      '         其中: s(t)=a1*g(t-nT)+a2*g(t-nT)+……             ',...
      '',...
      '    g(t)是持续时间Ts的矩形脉冲,w为载波频率, {a}为二进制数字,是',...
      '第n个符号的电平取值。',...
};
    case 2
        strpop={'2FSK数字调制简介:',...
            '',...
      '    数字频率调制又称为频移键控,记作FSK(Frequency Shift Keying),',...
      '二进制频移键控记作2FSK。数字频移键控是用载波的频率来传送数字信息的,',...
      '即用所传送的数字消息控制载波的频率,由于数字只有有限个取值。那么,',...
      '2FSK信号便是符号“1”对应与载频w1,而符号“0”对应于载频w2(与w1不',...
      '同的另一个载频)的已调波形,而且w1与w2之间的改变是瞬间来完成的。从原',...
      '理上讲调频可用模拟调频来实现,也可用键控法来实现,后者较为简便。2FSK',...
      '键控法就是利用受矩形脉冲序列控制的开关电路对两个不同的独立频率源进行',...
      '选通的。',...
      '    若正弦载波的频率随二进制基带信号在w1和w2 两个频率点之间变化,才',...
      '产生二进制频移键控信号(2FSK信号)。它的波形可以看作是两个不同载波的',...
      '二进制振幅键控信号的叠加。若二进制基带信号的1符号对应于载波频率的w1,',...
      '0符号对应于载波频率的w2,则二进制频移键控信号的时域表达式为:',...
      '',...
      '             e(t)=s1(t)*cos(w1*t)+s2(t)*cos(w2*t)     ',...
      '',...
      '       其中:s1(t)=a1*g(t-nT)+a2*g(t-nT)+……          ',...
      '            s2(t)=b1*g(t-nT)+b2*g(t-nT)+……         ',...
      '',...
       '    g(t)是持续时间Ts的矩形脉冲,w1和w2为不同载波频率, {a}与{b}为',...
       '相反二进制数字,也是第n个符号的相反电平取值。',...
           };  
    case 3 
        strpop={'2PSK数字调制简介:',...
            '',...
       '    数字相位调制又称相移键控,记作PSK (Phase Shift Keying)。二进',...
       '制相移键控记作2PSK。它们是利用载波振荡相位的变化来传送数字信息的。',...
       '在二进制数字解调中,当正弦载波的相位随二进制数字基带信号离散变化,',...
       '则就产生二进制移相键控(2PSK)信号。',...
       '    通常用已调信号载波的0°和180°分别表示二进制数字基带信号的1和0。',...
       '二进制移相键控信号的时域表达式为:',...
       '',...
       '                 e(t)=s(t)*cos(w*t)                       ',...
      '',...
      '         其中: s(t)=a1*g(t-nT)+a2*g(t-nT)+……             ',...
      '',...
      '    g(t)是持续时间Ts的矩形脉冲,w为载波频率, 与2ASK和2FSK不同{a}',...
      '为双极性的,即“1”和“-1”,也是第n个符号的电平取值。',...
            ''};
end
    case 2
         switch popup5_sel_index
            case 1
                strpop={'2ASK数字解调简介:',...
      '     2ASK信号的解调由振幅检波器来完成,具体方法主要有两种:非相干解',...
      '调法(包络检波法)和相干解调法(同步检测法)。',...
      '     本课程设计采用非相干解调法(包络检波法)实现,即带通滤波器恰好',...
      '使2ASK信号完整地通过,经包络检测后,输出其包络。低通滤波器的作用是',...
      '滤除高频杂波,使基带包络信号通过。抽样判决器包括抽样、判决及码元形成,',...
      '有时又称译码器。不计噪声影响时,带通滤波器输出为2ASK信号,即:',...
      '                   y(t)= s(t)cos(w*t)',...
      '包络检波器输出为s(t),经过抽样、判决后将码元再生,即可恢复出数字序列{a}。',...
};
            case 2
                 strpop={'2FSK数字解调简介:',...
                     '',...
      '   数字调频信号的解调方法很多,可以分为线性鉴频法和分离滤波法两大类。',...
      '线性鉴频法有模拟鉴频法、过零检测法、差分检测法,分离滤波法又包括相干',...
      '检测法、非相干检测法以及动态滤波法等。有非相干解调方法也有相干解调方法。',...
      '  (1)包络检测法',...
      '   本课程设计也采用包络检测法,首先两个窄带的分路滤波器分别滤出频率',...
      '为w1和w2的高频脉冲 ,经包络检测后分别取出它们的包络。把两路输出同时',...
      '送到抽样判决器进行比较,从而判决输出基带数字信号。',...
      '  (2)同步检测波法',...
      '   实际中也有很多采用该方法,首先将调制信号经过两个带通滤波器的作用',...
      '同上,起到分路的作用,它们的输出分别与相应的同步载波相乘,再分别经过',...
      '低通滤波器取出含基带数字信息的低频信号,滤掉二倍频信号,抽样判决器在',...
      '抽样脉冲到来时对两个低频信号进行比较判决,即可还原出基带数字信号 。',...
};
            case 3
                strpop={'2PSK数字解调简介:',...
                     '',...
      '    2PSK信号的解调通常都是采用相干解调,在相干解调过程中需要用到与接',...
      '收的2PSK信号同频同相的相干载波。',...
      '本课程设计也是采用2PSK信号相干解调,2PSK信号在恢复时的相干载波容易产',...
      '生180°倒相时,解调出的数字基带信号将与发送的数字基带信号正好是相反,',...
      '解调器输出数字基带信号全部出错。这种现象通常称为“倒π”现象。由于在',...
      '2PSK信号的载波恢复过程中存在着180°的相位模糊,所以2PSK信号的相干解',...
      '调存在随机的“倒π”现象,从而使得2PSK方式在实际中很少采用。',...
};
         end
        
end
set(handles.listbox1,'string',strpop);


% --- Executes during object creation, after setting all properties.
function popupmenu5_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


% --- Executes on selection change in popupmenu4.
function popupmenu4_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenu4 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from
%        popupmenu4
popup5_sel_index = get(handles.popupmenu5, 'Value');
popup4_sel_index = get(handles.popupmenu4, 'Value');
strpop='';
switch popup4_sel_index
    case 1
        switch popup5_sel_index
            case 1
                strpop={'2ASK数字调制简介:',...
            '',...
      '    二进制数字振幅键控是一种古老的调制方式,是各种数字调制的基础振幅',...
      '键控(也称幅移键控),记作ASK(Amplitude Shift Keying),或称其为开关键',...
      '控(通断键控),记作OOK(On Off  Keying)。二进制数字振幅键控通常记作',...
      '2ASK。',...
      '   对于振幅键控这样的线性调制来说,在二进制里,2ASK是利用代表数字信',...
      '息“0”或“1”的基带矩形脉冲去键控一个连续的载波,使载波时断时续地输',...
      '出。有载波输出时表示发送“1”,无载波输出时表示发送“0”。根据线性调',...
      '制的原理,一个二进制的振幅键控信号可以表示成一个单极性矩形脉冲序列与',...
      '一个正弦型载波的相乘,即',...
      '',...
      '                 e(t)=s(t)*cos(w*t)                       ',...
      '',...
      '         其中: s(t)=a1*g(t-nT)+a2*g(t-nT)+……             ',...
      '',...
      '    g(t)是持续时间Ts的矩形脉冲,w为载波频率, {a}为二进制数字,是',...
      '第n个符号的电平取值。',...
};
            case 2
               strpop={'2FSK数字调制简介:',...
            '',...
      '    数字频率调制又称为频移键控,记作FSK(Frequency Shift Keying),',...
      '二进制频移键控记作2FSK。数字频移键控是用载波的频率来传送数字信息的,',...
      '即用所传送的数字消息控制载波的频率,由于数字只有有限个取值。那么,',...
      '2FSK信号便是符号“1”对应与载频w1,而符号“0”对应于载频w2(与w1不',...
      '同的另一个载频)的已调波形,而且w1与w2之间的改变是瞬间来完成的。从原',...
      '理上讲调频可用模拟调频来实现,也可用键控法来实现,后者较为简便。2FSK',...
      '键控法就是利用受矩形脉冲序列控制的开关电路对两个不同的独立频率源进行',...
      '选通的。',...
      '    若正弦载波的频率随二进制基带信号在w1和w2 两个频率点之间变化,才',...
      '产生二进制频移键控信号(2FSK信号)。它的波形可以看作是两个不同载波的',...
      '二进制振幅键控信号的叠加。若二进制基带信号的1符号对应于载波频率的w1,',...
      '0符号对应于载波频率的w2,则二进制频移键控信号的时域表达式为:',...
      '',...
      '             e(t)=s1(t)*cos(w1*t)+s2(t)*cos(w2*t)     ',...
      '',...
      '       其中:s1(t)=a1*g(t-nT)+a2*g(t-nT)+……          ',...
      '            s2(t)=b1*g(t-nT)+b2*g(t-nT)+……         ',...
      '',...
       '    g(t)是持续时间Ts的矩形脉冲,w1和w2为不同载波频率, {a}与{b}为',...
       '相反二进制数字,也是第n个符号的相反电平取值。',...
           };  
            case 3
               strpop={'2PSK数字调制简介:',...
            '',...
       '    数字相位调制又称相移键控,记作PSK (Phase Shift Keying)。二进',...
       '制相移键控记作2PSK。它们是利用载波振荡相位的变化来传送数字信息的。',...
       '在二进制数字解调中,当正弦载波的相位随二进制数字基带信号离散变化,',...
       '则就产生二进制移相键控(2PSK)信号。',...
       '    通常用已调信号载波的0°和180°分别表示二进制数字基带信号的1和0。',...
       '二进制移相键控信号的时域表达式为:',...
       '',...
       '                 e(t)=s(t)*cos(w*t)                       ',...
      '',...
      '         其中: s(t)=a1*g(t-nT)+a2*g(t-nT)+……             ',...
      '',...
      '    g(t)是持续时间Ts的矩形脉冲,w为载波频率, 与2ASK和2FSK不同{a}',...
      '为双极性的,即“1”和“-1”,也是第n个符号的电平取值。',...
            ''};
        end
    case 2
        switch popup5_sel_index
            case 1
                 strpop={'2ASK数字解调简介:',...
      '     2ASK信号的解调由振幅检波器来完成,具体方法主要有两种:非相干解',...
      '调法(包络检波法)和相干解调法(同步检测法)。',...
      '     本课程设计采用非相干解调法(包络检波法)实现,即带通滤波器恰好',...
      '使2ASK信号完整地通过,经包络检测后,输出其包络。低通滤波器的作用是',...
      '滤除高频杂波,使基带包络信号通过。抽样判决器包括抽样、判决及码元形成,',...
      '有时又称译码器。不计噪声影响时,带通滤波器输出为2ASK信号,即:',...
      '                   y(t)= s(t)cos(w*t)',...
      '包络检波器输出为s(t),经过抽样、判决后将码元再生,即可恢复出数字序列{a}。',...
};
            case 2
               strpop={'2FSK数字解调简介:',...
                     '',...
      '   数字调频信号的解调方法很多,可以分为线性鉴频法和分离滤波法两大类。',...
      '线性鉴频法有模拟鉴频法、过零检测法、差分检测法,分离滤波法又包括相干',...
      '检测法、非相干检测法以及动态滤波法等。有非相干解调方法也有相干解调方法。',...
      '  (1)包络检测法',...
      '   本课程设计也采用包络检测法,首先两个窄带的分路滤波器分别滤出频率',...
      '为w1和w2的高频脉冲 ,经包络检测后分别取出它们的包络。把两路输出同时',...
      '送到抽样判决器进行比较,从而判决输出基带数字信号。',...
      '  (2)同步检测波法',...
      '   实际中也有很多采用该方法,首先将调制信号经过两个带通滤波器的作用',...
      '同上,起到分路的作用,它们的输出分别与相应的同步载波相乘,再分别经过',...
      '低通滤波器取出含基带数字信息的低频信号,滤掉二倍频信号,抽样判决器在',...
      '抽样脉冲到来时对两个低频信号进行比较判决,即可还原出基带数字信号 。',...
};
            case 3
              strpop={'2PSK数字解调简介:',...
                     '',...
      '    2PSK信号的解调通常都是采用相干解调,在相干解调过程中需要用到与接',...
      '收的2PSK信号同频同相的相干载波。',...
      '本课程设计也是采用2PSK信号相干解调,2PSK信号在恢复时的相干载波容易产',...
      '生180°倒相时,解调出的数字基带信号将与发送的数字基带信号正好是相反,',...
      '解调器输出数字基带信号全部出错。这种现象通常称为“倒π”现象。由于在',...
      '2PSK信号的载波恢复过程中存在着180°的相位模糊,所以2PSK信号的相干解',...
      '调存在随机的“倒π”现象,从而使得2PSK方式在实际中很少采用。',...
};  
        end
end
set(handles.listbox1,'string',strpop);

% --- Executes during object creation, after setting all properties.
function popupmenu4_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


% --- Executes on selection change in listbox1.
function listbox1_Callback(hObject, eventdata, handles)
% hObject    handle to listbox1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns listbox1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from listbox1


% --- Executes during object creation, after setting all properties.
function listbox1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to listbox1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: listbox controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
close all;


% --------------------------------------------------------------------
function Untitled_4_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --------------------------------------------------------------------
function Untitled_5_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --------------------------------------------------------------------
function Untitled_6_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --------------------------------------------------------------------
function Untitled_7_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_7 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --------------------------------------------------------------------
function Untitled_8_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_8 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --------------------------------------------------------------------
function Untitled_1_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --------------------------------------------------------------------
function Untitled_3_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --------------------------------------------------------------------
function Untitled_9_Callback(hObject, eventdata, handles)
% hObject    handle to Untitled_9 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in axes5.
function axes5_Callback(hObject, eventdata, handles)
% hObject    handle to axes5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
popup5_sel_index = get(handles.popupmenu5, 'Value');
popup4_sel_index = get(handles.popupmenu4, 'Value');
switch popup4_sel_index
    case 1
        switch popup5_sel_index
            case 1
                am1;
            case 2
                fm1;
            case 3
                pm1;
        end
    case 2
         switch popup5_sel_index
            case 1
                jam1;
            case 2
                jfm1;
            case 3
                jpm1;
         end
end